#include <iostream>
#include <algorithm>

using namespace std;

int cutwoods(int n, int m){
    int count = 0;//切分的计数
    int num = 1;//木棍的段数

    if(n < 0 || m <= 0){//参数错误
        return 0;
    }

    while (n > num) {//当木棍长度n <= 段数num时，已经都切分为 1 厘⽶的⼩段了
        num += min(num, m);//当段数比牛少时，段数*2；当段数比牛多时，所有牛无法同时切割所有段，所以增加的段数为牛的个数
        ++count;//计数
    } 

    return count;//返回
}

//n:木棍长度,m:牛的个数,num:木棍段数
//return - 切的次数
int cutwoods1(int n, int m, int num){
    if(num > n){//递归终止条件
        return 0;
    }
    
    if (m >= num) {//当段数比牛少时，段数*2
        return cutwoods1(n, m, num * 2) + 1;
    }
    else {//当段数比牛多时，所有牛无法同时切割所有段，所以增加的段数为牛的个数
        return cutwoods1(n, m, num + m) + 1;
    }
}

int main(int argc, char const *argv[])
{
    cout << cutwoods1(8, 3, 1) << endl;
    return 0;
}